\documentclass[a4paper,10pt,titlepage]{article}
\usepackage[paperwidth=190mm,paperheight=290mm,left=1.5cm,top=3cm,right=1.5cm,bottom=1cm,head=2.0cm,includefoot]{geometry}
\usepackage[utf8]{inputenx}
\usepackage{pdfpages}
\usepackage[activeacute,spanish]{babel}
\usepackage{titlesec}
\usepackage{lastpage}
\usepackage{comment}
\usepackage{fancyhdr}
\usepackage[T1]{fontenc}
\usepackage{graphicx}
\usepackage{bookman}
\usepackage{booktabs}
\usepackage{appendix}
\usepackage{enumerate}
\usepackage[usenames,dvipsnames]{color}

\usepackage{amsmath}
\usepackage{longtable}
\usepackage{moreverb}
\usepackage{multirow}
\usepackage{ulem}

\usepackage{array}
\usepackage{float}
\usepackage{wrapfig}
\usepackage{soul}
\usepackage{t1enc}
\usepackage{textcomp}
\usepackage{marvosym}
\usepackage{latexsym}

\usepackage{amssymb}
\usepackage{slashbox} %slash para la tabla
\usepackage{pdfpages} % to import PDF pages

\usepackage{enumerate}
\usepackage[procnames]{listings}
\usepackage{setspace}
\usepackage{palatino}

\usepackage[pdfborder={0 0 0 0}]{hyperref}
\usepackage{makeidx}
\usepackage{caption}
\usepackage{verbatim}
\usepackage{listingsutf8}

\renewcommand{\headrulewidth}{1pt}
\renewcommand{\footrulewidth}{1pt}

\titleformat{\section}[hang]{\Huge }{}{0px}{\flushleft \hspace{1ex}}{}

\newenvironment{changemargin}[2]{%
  \begin{list}{}{%
    \setlength{\topsep}{0pt}%
    \setlength{\leftmargin}{#1}%
    \setlength{\rightmargin}{#2}%
    \setlength{\listparindent}{\parindent}%
    \setlength{\itemindent}{\parindent}%
    \setlength{\parsep}{\parskip}%
  }%
  \item[]}{\end{list}}
 
\definecolor{gray}{gray}{0.5}
\definecolor{green}{rgb}{0,0.5,0}
\definecolor{lightgreen}{rgb}{0,0.7,0}
\definecolor{purple}{rgb}{0.5,0,0.5}
\definecolor{darkred}{rgb}{0.5,0,0}

\lstset{
extendedchars=\true,
inputencoding=utf8,
language=bash,
basicstyle=\ttfamily\small\setstretch{1},
stringstyle=\color{green}\upshape,
showstringspaces=false,
alsoletter={1234567890},
morekeywords={sub,use},
otherkeywords={\ , \}, \{},
keywordstyle=\color{blue}\bfseries,
emph={access,and,as,break,continue,del,else,elsif,%
except,exec,finally,for,foreach,from,global,if,import,in,is,%
lambda,not,or,pass,print,raise,return,try,while,assert},
emphstyle=\color{BurntOrange}\bfseries,
emph={[2]self},
emphstyle=[2]\color{gray},
emph={[3]ArithmeticError,AssertionError,AttributeError,BaseException,%
DeprecationWarning,EOFError,Ellipsis,EnvironmentError,Exception,%
False,FloatingPointError,FutureWarning,GeneratorExit,IOError,%
ImportError,ImportWarning,IndentationError,IndexError,KeyError,%
KeyboardInterrupt,LookupError,MemoryError,NameError,None,%
NotImplemented,NotImplementedError,OSError,OverflowError,%
PendingDeprecationWarning,ReferenceError,RuntimeError,RuntimeWarning,%
StandardError,StopIteration,SyntaxError,SyntaxWarning,SystemError,%
SystemExit,TabError,True,TypeError,UnboundLocalError,UnicodeDecodeError,%
UnicodeEncodeError,UnicodeError,UnicodeTranslateError,UnicodeWarning,%
UserWarning,ValueError,Warning,ZeroDivisionError,abs,all,any,apply,%
basestring,bool,buffer,callable,chr,classmethod,cmp,coerce,compile,%
complex,copyright,credits,delattr,dict,dir,divmod,enumerate,eval,%
execfile,exit,file,filter,float,frozenset,getattr,globals,hasattr,%
hash,help,hex,id,input,int,intern,isinstance,issubclass,iter,len,%
license,list,locals,long,map,max,min,object,oct,open,ord,pow,property,%
quit,range,raw_input,reduce,reload,repr,reversed,round,set,setattr,%
slice,sorted,staticmethod,str,sum,super,tuple,type,unichr,unicode,%
vars,xrange,zip},
emphstyle=[3]\color{Red}\bfseries,
emph={[4]InstalaW5,IniciarW5,DetectaW5,BuscarW5,ListarW5,MoverW5,LoguearW5,MirarW5,StartD,StopD,%
GRUPO,CONFDIR,BINDIR,MAEDIR,ARRIDIR,ACEPDIR,RECHDIR,PROCDIR,REPODIR,LOGDIR,LOGEXT,LOGSIZE,DATASIZE,SECUENCIA1,SECUENCIA2,%
\$GRUPO,\$CONFDIR,\$BINDIR,\$MAEDIR,\$ARRIDIR,\$ACEPDIR,\$RECHDIR,\$PROCDIR,\$REPODIR,\$LOGDIR,\$LOGEXT,\$LOGSIZE,\$DATASIZE,\$SECUENCIA1,\$SECUENCIA2,%
PAT_ID,PAT_EXP,PAT_CON,DESDE,HASTA,SIS_ID,SIS_NOM,SIS_ALTA,SIS_BAJA,%
\$PAT_ID,\$PAT_EXP,\$PAT_CON,\$DESDE,\$HASTA,\$SIS_ID,\$SIS_NOM,\$SIS_ALTA,\$SIS_BAJA},
emphstyle=[4]\color{purple}\bfseries,
upquote=true,
morecomment=[s][\color{green}]{"""}{"""},
commentstyle=\color{gray}\slshape,
literate={>>>}{\textbf{\textcolor{darkred}{>{>}>}}}3%
         {...}{{\textcolor{gray}{...}}}3,
procnamekeys={def,class},
procnamestyle=\color{blue}\textbf,
tabsize=2,
numbers=left,
numbersep=15pt,
breaklines=true,
frame=Ltb, framerule=0pt, framexleftmargin=0.3cm,rulesep=.4pt,
%frame=Ltb, framesep=0pt,rulesep=0pt,framexleftmargin=0.3cm, framerule=0.4pt,
rulesepcolor=\color{gray},
mathescape=false}

\setcounter{tocdepth}{2}

\begin{document}

\pagestyle{fancy}
\chead{TP UNIX-PERL}
\lhead{\includegraphics[width=1.7cm]{./logo1.png}}
\lfoot{Grupo 08: Tema W}
\cfoot{}
\rfoot{P\'agina \thepage \hspace{0.5pt} de \pageref{LastPage}}

\includepdf{./Caratula.pdf}
\includepdf{./Enunciado.pdf}
\includepdf[pages=1-2]{./Enunciado.pdf}

\tableofcontents


\newpage
\section{Hip\'otesis y aclaraciones globales}
\vspace*{0.5cm}

\begin{enumerate}
	
	\item No se mueven ni se modifican los archivos y directorios creados por los distintos comandos.
	\item Los archivos maestros deben estar bien formados y son válidos.
	\item Todos los archivos se consideran como archivos de texto.
	\item Para poder realizar la instalacion, inicialmente se deben tener:
		\begin{itemize}
		\item los archivos de los comandos a instalar (IniciarW5.sh, DetectaW5.sh, BuscarW5.sh, ListarW5.pl, ResultadosGlobales.pm, LoguearW5.sh, MirarW5.sh, MoverW5.sh, StartD.sh, StopD.sh).
		\item los archivos maestros (sistemas, patrones, mensajes)
		\item la carpeta confdir (vacía)
		\end{itemize}
	en un tar.gz que se encuentre en el mismo nivel que InstalaW5.
	\item No es necesario tener todos los comandos para poder efectuar la instalación. Se instalarán únicamente los que se encuentren dentro del tar.gz.  Los comandos pendientes se podrán instalar luego llamando nuevamente a InstalaW5.
	\item Luego de seleccionar todas las rutas para realizar la instalación, de no estar conforme con la elección se vuelve al punto en que se elige la ruta para los ejecutables (BINDIR).
	\item Si en InstalaW5 el estado de la instalacón es INCOMPLETA no se vuelven a elegir las rutas de los directorios ya asignados.
	\item Los directorios de trabajo para la instalción se crean dentro de $\$$(pwd)/grupo08/
	\item Los valores default en el proceso de instalación se encuentran entre paréntesis.
        \item El espacio mínimo libre para arribos y el tamaño máximo para los archivos del log del sistema solo pueden ser números enteros.
	\item Es posible interrumpir la ejecución de InstalaW5 en cualquier momento escribiendo ''salir'' o ''Control + C''
	\item El comando IniciarW5 se debe ejecutar desde el directorio BINDIR.
	\item Se hará uso de las siguientes variables globales:
		\begin{itemize}
		\item GRUPO = Número de grupo (08)
		\item CONFDIR = Ruta del directorio de la carpeta de configuración (config).
		\item BINDIR = Ruta del directorio de la carpeta donde se encuentran los comandos (bin).
		\item MAEDIR = Ruta del directorio de los archivos maestros.
		\item ARRIDIR = Ruta del directorio de los archivos de logueo que arriban.
		\item ACEPDIR = Ruta del directorio de los archivos de logueo que son aceptados.
		\item RECHDIR = Ruta del directorio de los archivos de logueo que son rechazados.
		\item PROCDIR = Ruta del directorio de los archivos de logueo que han sido procesados.
		\item REPODIR = Ruta del directorio donde se encuentran los reportes.
		\item LOGDIR = Ruta del directorio de los archivos de log.
		\item LOGEXT = Extensión de los archivos de log.
		\item LOGSIZE = Tamaño máximo del log.
		\item DATASIZE = Espacio mínimo libre para el arribo de archivos externos.
		\item SECUENCIA1 = No se utiliza.
		\item SECUENCIA2 = Número de ciclo de BuscarW5.
		\end{itemize}
	\item Nuevas variables globales incorporadas:
		\begin{itemize}
		\item INICIAW5\_EJECUTADO\_EXITOSAMENTE = Flag para determinar si se ejecutó IniciarW5.
		\end{itemize}
	\item La estandarización de los mensajes se realiza a partir de un archivo con los mensajes más utilizados y asignándole a cada uno un ID para poder ser utilizado cuando se invoca el comando LoguearW5 (como alternativa se puede pasar el mensaje directamente).
	\item El archivo con los mensajes estándar a utilizarse en el log se encuentra dentro del directorio MAEDIR.
	\item En caso que se supere el tamaño del log ( LOGSIZE ), se borra la mitad de las líneas del archivo de log.
	\item En DetectaW5 se contempla el caso en que la fecha de baja del archivo maestro del sistema no esté vacio sino que haya un espacio.
	\item En general los programas que se instalan en linux, dejan la configuración dentro del directorio $\$$HOME del usuario, por lo cual se va a seguir esta práctica. Así se evitan problemas de ubicación del archivo de configuración como el hardcodeo de su ruta.
	\item El código del sistema del archivo maestro de sistemas es del tipo alfanumérico.
	\item El formato de los nombres de archivo debe ser de la forma: \textless SIS\_ID\textgreater\_\textless fecha con formato aaaa-mm-dd\textgreater
	\item Al comando MirarW5 se le puede ejecutar con una única opcion por vez.
	\item Todos los archivos válidos deben haber pasado de la carpeta: ARRDIR a ACEPTDIR y luego a o bien PROCDIR o bien RECHDIR.  No se pueden agregar archivos de antemano en ACEPTDIR y PROCDIR.
	\item El formato de los archivos de log tendrá la estructura DD/MM/AA HH:MM:SS-USUARIO-COMANDO-TIPO\_DE\_MENSAJE-MENSAJE
	
\end{enumerate}

\newpage
\section{Problemas relevantes}
\vspace*{0.5cm}

	\begin{itemize}
	
	\item Determinar dónde guardar el archivo de configuración para no tener que hardcodear la ruta.  Consideramos que la mejor alternativa es dentro de una carpeta oculta ''grupo08''  en el directorio $\$$HOME del usuario, siguiendo la filosofía UNIX.
	\item Incompatibilidad entre las versiones de bash de la facultad (3.2.48) y la de nuestras maquinas (a partir de la 4.2).
	\item Interpretación de los comandos StartD y StopD. Para el primer comando mencionado consideramos que se utiliza como una forma alternativa para iniciar el demonio, teniendo en cuenta que previamente hay que inicializar el ambiente.  StopD detiene totalmente la ejecucion del demonio.
	\item Estandarización de los mensajes. Se utiliza una tabla de mensajes con los mensajes más frecuentes.
	
	\end{itemize}

\newpage
\section{Archivo README}
\vspace*{0.5cm}

\subsection{Instrucciones de preparación}
\vspace*{0.25cm}

\begin{enumerate}
\item Insertar el dispositivo de almacenamiento (pendrive) con el instalable.
\item Crear en el directorio corriente un directorio de trabajo.
\item Copiar el instalable (grupo08.tar.gz) en ese directorio.
\end{enumerate}

\subsection{Instrucciones de instalación}
\vspace*{0.25cm}

\begin{enumerate}
\item Abrir consola.
\item Posicionarse en el directorio de trabajo.
\item Ejecutar InstalaW5.sh \\
\indent $\$$ ./InstalaW5.sh \\
\end{enumerate}

El propósito del comando InstalaW5 es efectuar la instalación del TP. \\

\subsection{Instrucciones para iniciar}
\vspace*{0.25cm}

\begin{enumerate}
\item Ejecutar IniciarW5.sh \\
\indent $\$$ cd BINDIR \\
\indent $\$$ . ./IniciarW5.sh \\
\end{enumerate}

El propósito del comando IniciarW5 es preparar el entorno para una correcta ejecución de los comandos subsiguientes. \\
Para ejecutarlo es necesario estar ubicado en el directorio dónde se encuentran los ejecutables (BINDIR). \\ 
Una vez iniciado, cualquier comando puede ser ejecutado sin necesidad de estar dentro del directorio de ejecutables. \\

\subsection{Instrucciones para mirar los archivos de logueo del TP}
\vspace*{0.25cm}

\begin{enumerate}
\item Ejecutar MirarW5.sh con alguna de las siguientes opciones:
\begin{itemize}
			\item[] Opción -p N muestra las primeras N líneas del archivo de log.
			\item[] Opción -u N muestra las últimas N líneas del archivo de log.
			\item[] Opción -s "string" muestra todas las líneas del archivo de log que contengan al string buscado.
			\item[] Opción -t T muestra todas las líneas que pertenezcan al tipo de mensaje T (A:alerta, I:informativo, E:error o ES:error severo).
\end{itemize}
\indent $\$$ MirarW5.sh [OPCION] [VALOR] \\
\end{enumerate}

El propósito del comando MirarW5 es mostrar en forma amigable los registros de los archivos de logueo. \\

\subsection{Instrucciones para listar resultados}
\vspace*{0.25cm}

\begin{enumerate}
\item Ejecutar ListarW5.sh \\
\indent $\$$ ListarW5.sh
\item Seguir el proceso interactivo para la selección de filtros y archivos. \\
\end{enumerate}

El propósito del comando ListarW5 es mostrar en forma amigable los resultados de la aplicación de los patrones a los archivos de logueo. \\

\subsection{Instrucciones para mover archivos}
\vspace*{0.25cm}

\begin{enumerate}
\item Ejecutar MoverW5.sh con un archivo origen y un directorio destino. \\
\indent $\$$ MoverW5.sh ARCHIVO\_ORIGEN DIRECTORIO\_DESTINO \\
\end{enumerate}

El propósito del comando MoverW5 es trasladar archivos de un directorio origen a un directorio destino. \\

\subsection{Instrucciones para detener la ejecución de comandos}
\vspace*{0.25cm}

\begin{enumerate}
\item Presione Ctrl+C.
\end{enumerate}

\newpage
\section{Comandos y funciones}
\vspace*{0.5cm}

\subsection{InstalaW5}
\vspace*{0.25cm}

El propósito de este comando es efectuar la instalación del TP. \\

El script debe permitir instalar todos los comandos al mismo tiempo, o de a uno por vez. \\
Cuando este script interactúa con el usuario, los valores por default propuestos se deberán mostrar
entre paréntesis (). En el arranque los valores default se indican en el enunciado, pero si el hilo de
ejecución se reinicia en otro punto los valores default deben ser reemplazados por lo ingresado
anteriormente en ese mismo paso por el usuario. \\

Precondiciones: \\

Antes de comenzar la ejecución del instalador es necesario copiar desde un medio externo el
instalable. La estructura de directorios del instalable será la siguiente: \\
                                                                       
\noindent++++++++++++++++++++++++Contenido del instalable+++++++++++++++++++++++ \\ 
+ grupo08                                                       + \\
+	confdir                                                     + \\
+{comando1..comandoN}			                    			+ \\
+{maestro1..maestroN}					                    	+ \\
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \\

\noindent confdir: \\
	\indent En este directorio se guardará el archivo de log de la instalación y se guardará el archivo de configuración. \\

\noindent comandosYmaestros: \\
	\indent Deberán estar incluidos en la carpeta grupo08. \\

Una vez terminada la instalación se generara en la carpeta confdir un archivo de configuración, lo que nos permitira luego instalar comandos faltantas si hiciera falta o conocer el estado de la instalación. \\\\
	
	\indent \emph{Archivos de input:}
	\begin{itemize}
		\item[-] Instalable grupo08.tar.gz.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos intermedios:}
	\begin{itemize}
		\item[-] Archivos temporales para verificar errores, que son borrados antes de terminar la instalación.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos de output:}
	\begin{itemize}
		\item[-] Creación de los directorios con los archivos necesarios para utilizar el sistema normalmente.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Par\'ametros y opciones:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Invocaci\'on:} \\[0.2cm]
		\indent El comando se ejecuta manualmente:
		\begin{itemize}
		\item[$\$$] ./InstalaW5.sh
		\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Hip\'otesis y aclaraciones espec\'ificas del comando:}
	\begin{itemize}
		\item[-] Para iniciar la instalación se debe contar con el script InstalaW5.sh al mismo nivel que el archivo instalable grupo08.targz.
		\item[-] Archivos preexistentes:
		\begin{itemize}
			\item Los comandos que se instalan deben corresponder con los nombres: IniciarW5.sh, MoverW5.sh, MirarW5.sh, DetectaW5.sh, StartD.sh, StopD.sh, LoguearW5.sh, BuscarW5.sh, ListarW5.pl, ResultadosGlobales.pm, InstalaW5.sh.
			\item Los archivos maestros que se instalan deben corresponder con los nombres: patrones, sistemas, Mensajes.mae.
		\end{itemize}
		\item[-] No se realizaran validaciones sobre el contenido de los comandos por lo cual los comandos y archivos maestros contenidos en el instalable se toman como de confianza y válidos.
	\end{itemize}
	\vspace*{0.1cm}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: InstalaW5.sh} \hfill \\[-0.7cm]

    \noindent\hrulefill
    
	\lstinputlisting{../comandos/InstalaW5.sh}
	
	\vspace*{1cm}
	
\subsection{IniciarW5}
\vspace*{0.25cm}

Es el primer comando en orden de ejecución, encargado de preparar el entorno para la correcta ejecución de los comandos subsiguientes. \\
	
Su principal función es verificar que la ejecución no se lleve a cabo en caso de que la instalación no haya sido efectuada exitosamente. Esto se realiza chequeando la validez del archivo de configuración. En él se valida la existencia de todas las entradas de directorios, archivos y variables. Por cada una de las variables de directorios se verifica que el directorio exista realmente y tenga los permisos adecuados para cada tipo de operación involucrada sobre él. \\

Para los comandos se verifica existencia y permisos de ejecución. Si la instalación es correcta, se procede a chequear que en el mismo
shell no se haya corrido este mismo comando, chequeando la existencia de determinadas variables y flags. En caso de que ya haya sido ejecutado, el programa se anula.  \\

Si todos los pasos anteriores fueron concluidos sin problemas, se realiza la invocación del comando del tipo demonio DetectaW5.sh, siempre que este no este ejecutandose. En tal caso, el programa anula. \\

Ante cualquiera de los errores mencionados anteriormente, el comando anula la ejecución de los comandos que le proceden y muestra un mensaje de error por pantalla, indicando cual fue la causa. En el caso de un problema de ejecución, se muestran los componentes que se encuentran correctamente instalados y los que faltan o tiene algun problema. Una vez ejecutado, los siguientes comandos en orden de ejecución dispondrán de todas las variables que se encuentran en el archivo de configuración seteadas con el mismo nombre en su shell. \\\\

	\indent \emph{Archivos de input:}
	\begin{itemize}
		\item[-] Archivo de configuración (InstalaW5.conf).
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos intermedios:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos de output:}
	\begin{itemize}
		\item[-] Archivo de log (\{LOGDIR\}/InstalaW5.\{LOGEXT\})
		\item[-] Standard output
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Par\'ametros y opciones:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Invocaci\'on:} \\[0.2cm]
	\indent El comando se ejecuta manualmente en cualquiera de las siguientes formas equivalentes:
	\begin{itemize}
	\item[$\$$] bash IniciarW5.sh
	\item[$\$$] ./IniciarW5.sh
	\item[$\$$]  . IniciarW5.sh
	\end{itemize}
	\vspace*{0.1cm}

	\indent \emph{Hip\'otesis y aclaraciones espec\'ificas del comando:}
	\begin{itemize}
		\item[-] Utiliza la hipótesis global del trabajo práctico de utilizar como ruta 
  del archivo de configuración del sistema $\$$HOME/.grupo08/InstalaW5.conf
	\end{itemize}
	\vspace*{0.1cm}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: IniciarW5.sh} \hfill \\[-0.7cm]

    \noindent\hrulefill
    
	\lstinputlisting{../comandos/IniciarW5.sh}
	
	\vspace*{1cm}
	
\subsection{DetectaW5}
\vspace*{0.25cm}

Proceso de tipo demonio que se ejecuta en background.  Es el segundo comando en orden de ejecucion, disparado automaticamente en el comando IniciarW5.  Se encarga de detectar la llegada de archivos al directorio de arribos y validar los nombres de los archivos detectados.  \\

Entre las validaciones a realizar se encuentran: \\

\begin{itemize}
\item[-] Formato: \textless SIS\_ID\textgreater\_\textless fecha con formato aaaa-mm-dd\textgreater
\item[-] \textless SIS\_ID\textgreater debe ser un codigo de sistema existente en el archivo maestro de sistemas.
\item[-] \textless fecha con formato aaaa-mm-dd\textgreater sea una fecha valida menor o igual a la fecha corriente.  La fecha debe ser mayor o igual a la fecha de alta del sistema y menor o igual que la fecha de baja del sistema.
\end{itemize}

Si no es valido se lo rechaza moviendo el archivo al directorio de rechazados y se graba en el log el motivo. En caso contrario, graba en el log el mensaje de exito y mueve el archivo al directorio de aceptados. \\

Una vez procesados todos los archivos del directorio de rechazados se chequea si hay archivos en el directorio de aceptados y en tal caso se invoca el comando BuscarW5.  \\\\
	
	\indent \emph{Archivos de input:}
	\begin{itemize}
		\item[-] Archivos de logueo (\textless SIS\_ID\textgreater\_\textless fecha con formato aaaa-mm-dd\textgreater).
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos intermedios:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos de output:}
	\begin{itemize}
		\item[-] Archivo de log (\{LOGDIR\}/DetectaW5.\{LOGEXT\})
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Par\'ametros y opciones:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Invocaci\'on:} \\[0.2cm]
	\indent El comando se ejecuta automaticamente con los comandos:
	\begin{itemize}
	\item[$\$$] ./IniciarW5.sh
	\item[$\$$] ./StartD.sh
	\end{itemize}
	 \vspace*{0.1cm}
	 
	\indent \emph{Hip\'otesis y aclaraciones espec\'ificas del comando:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: DetectaW5.sh} \hfill \\[-0.7cm]

    \noindent\hrulefill
    
	\lstinputlisting{../comandos/DetectaW5.sh}
	
	\vspace*{1cm}

\subsection{BuscarW5}
\vspace*{0.25cm}

El propósito de este comando es procesar los archivos de logueo aceptados, aplicando los patrones de búsqueda apropiados y grabando los resultados en los archivos correspondientes. \\

Para la correcta ejecución de este comando se deben cumplir dos condiciones:
\begin{enumerate}
\item El comando IniciarW5 se debe haber ejecutado en la misma sesión de usuario.
\item No debe existir otro BuscarW5 corriendo. \\
\end{enumerate}

Este comando se ejecuta automáticamente con el arribo de archivos de logueo al directorio de aceptados. Cada archivo
corresponde a un sistema y un día particular. Si se detecta que un alguno está duplicado entonces se lo rechaza grabándolo en el directorio de rechazados. \\

Se aplican los patrones de búsquedas predefinidos que se indican en el maestro de patrones y por cada hallazgo que se produce se genera un resultado de acuerdo al contexto establecido. Dicho contexto puede ser de dos tipos: \\

\begin{itemize}
\item Contexto del tipo línea \\
En este contexto se graban registros completos en el archivo de resultados, según los campos "desde" y "hasta" especificados para el patrón en el archivo de patrones. El punto de partida siempre es el número de registro relativo respecto de la línea en donde se materializa el hallazgo.

\item Contexto del tipo carácter \\
En este contexto se graba sólo una porción del registro en el archivo de resultados, según los campos "desde" y "hasta" especificados para el patrón en el archivo de patrones. El punto de partida siempre es la posición relativa respecto al primer carácter de la línea en donde se materializa el hallazgo.

\end{itemize}

Por último se generan resultados globales de cada patrón; indicando la cantidad de hallazgos, la expresión regular aplicada y el contexto con los correspondientes desde y hasta. \\

Tanto los resultados detallados como los globales se registran en el directorio de procesados. \\\\

	\indent \emph{Archivos de input:}
	\begin{itemize}
		\item[-] Archivo de configuración (InstalaW5.conf).
		\item[-] Archivos aceptados (\textless sis\_id\textgreater\_\textless aaaa.mm-dd\textgreater).
		\item[-] Archivos procesados (\textless sis\_id\textgreater\_\textless aaaa.mm-dd\textgreater).
		\item[-] Archivo de patrones.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos intermedios:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos de output:}
	\begin{itemize}
		\item[-] Archivo de configuración (InstalaW5.conf).
		\item[-] Archivos rechazados (\textless sis\_id\textgreater\_\textless aaaa.mm-dd\textgreater).
		\item[-] Archivos procesados (\textless sis\_id\textgreater\_\textless aaaa.mm-dd\textgreater):
		\item[-] Archivos de resultados globales (rglobales.PAT\_ID).
		\item[-] Archivos de resultados detallados (resultados.PAT\_ID).
		\item[-] Archivo de log (\{LOGDIR\}/BuscarW5.\{LOGEXT\})
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Par\'ametros y opciones:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Invocaci\'on:} \\[0.2cm]
	\indent El comando se ejecuta autom\'aticamente en background:
	\begin{itemize}
		\item[$\$$] bash BuscarW5.sh \&
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Hip\'otesis y aclaraciones espec\'ificas del comando:}
	\begin{itemize}
		\item[-] Utiliza la hipótesis global del trabajo práctico de utilizar como ruta del archivo de configuración del sistema $\$$HOME/.grupo08/InstalaW5.conf.
	\end{itemize}
	\vspace*{0.1cm}
	
	\vspace*{0.5cm}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: BuscarW5.sh} \hfill \\[-0.7cm]

    \noindent\hrulefill
    
	\lstinputlisting{../comandos/BuscarW5.sh}
	
	
	\vspace*{1cm}
	
\subsection{ListarW5}
\vspace*{0.25cm}

Este comando permite generar reportes de diversa índole sobre los resultados ya procesados por los demás comandos. Habilita al usuario a generar informes respecto a las cantidades de hallazgos (coincidencias de los patrones en los archivos procesados) y también
le permite obtener en detalle cuáles fueron los textos que coincidieron con los patrones y en qué registros. \\

Posee una interfaz interactiva mediante la cual se pueden seleccionar diversos filtros para las consultas, así como criterios por los cuales ordenar, limitar y agrupar los resultados encontrados. \\

También permite exportar los reportes a archivos en disco para su futura consulta. \\\\

	\indent \emph{Archivos de input:}
	\begin{itemize}
		\item[-] Archivo de configuración (InstalaW5.conf).
		\item[-] Archivos maestros de patrones y sistemas.
		\item[-] Archivos de resultados globales (rglobales.PAT\_ID).
		\item[-] Archivos de resultados detallados (resultados.PAT\_ID).
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos intermedios:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos de output:}
	\begin{itemize}
		\item[-] Archivos de reportes (reportes/salida\_XXX).
		\item[-] Standard output.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Par\'ametros y opciones:}
	\begin{itemize}
		\item[-] Opción -h muestra la ayuda del programa.
		\item[-] Opción -g permite realizar consultas sobre los resultados globales. Es decir, cantidad de hallazgos. No puede ser
	  utilizada junto con -r. Es la opción por defecto.
	  	\item[-] Opción -r permite realizar consultas sobre los resultados detallados. Permite mostrar la cadena de texto que coincidió
	  con un patrón, en qué archivo y en qué número de registro.
	 	\item[-] Opción -x hace que el programa guarde la salida de la consulta en un archivo dentro del directorio de reportes (REPODIR).
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Invocaci\'on:} \\[0.2cm]
	\indent La invocación de este comando se realiza sólo de forma manual. \\
	\indent Ejemplos:
	\begin{itemize}
	\item[$\$$] ./ListarW5.pl -h (muestra la ayuda del programa).
	\item[$\$$] ./ListarW5.pl -g -x (genera una consulta sobre cantidad de hallazgos y guarda el reporte).
	\item[$\$$] ./ListarW5.pl -r (genera una consulta sobre hallazgos y no guarda el reporte, sólo lo muestra por la salida estándar).
	\end{itemize}

	\indent Una vez ejecutado, guiará al usuario para el ingreso de filtros y criterios
de consulta en forma interactiva. \\[0.1cm]
	
	\indent \emph{Hip\'otesis y aclaraciones espec\'ificas del comando:}
	\begin{itemize}
		\item[-] Utiliza la hipótesis global del trabajo práctico de utilizar como ruta del archivo de configuración del sistema $\$$HOME/.grupo08/InstalaW5.conf
	\end{itemize}
	\vspace*{0.1cm}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: ListarW5.sh} \hfill \\[-0.7cm]

    \noindent\hrulefill

	\lstinputlisting{../comandos/ListarW5.pl}
	
	\vspace*{1cm}
	
\subsection{MoverW5}
\vspace*{0.25cm}

MoverW5 \\
	\indent \indent Opciones y Parámetros \\
	\indent \indent Parámetro 1 (obligatorio): origen \\
	\indent \indent Parámetro 2 (obligatorio): destino \\
	\indent \indent Parámetro 3 (opcional): comando que la invoca \\

Descripción

\begin{enumerate}

\item El servicio que brinda esta función es el movimiento de archivos de un directorio a otro contemplando la posibilidad de archivos duplicados. El comando solo permite mover archivos cuando el origen y el destino son distintos. 

\item Casos posibles \\

\begin{enumerate}

\item “MOVER ESTANDARD” \\
Cuando el directorio de origen es distinto al directorio destino y en el destino no hay un archivo con el mismo nombre. En este caso se copia el archivo al directorio destino con el nombre: <nombre del archivo original>. 0 y se elimina el archivo del directorio origen. \\


\item “MOVER DUPLICADO” \\

Cuando el directorio de origen es distinto al directorio destino y en el destino hay un archivo con el mismo nombre. En este caso se copia el archivo al directorio destino con el nombre: <nombre del archivo original>. <sec> , dónde <sec> es el número de secuencia y eliminar el archivo del directorio origen. \\
Para el numero de secuencia se verificaran si en el destino existe el archivo {<nombre>.x} empezando con x=1 hasta que el archivo no exista, la secuencia sera el último valor verificado de esta manera.

\end{enumerate}

\end{enumerate}
\vspace*{0.1cm}

	\indent \emph{Archivos de input:}
	\begin{itemize}
		\item[-] Archivo a mover.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos intermedios:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos de output:}
	\begin{itemize}
		\item[-] Archivo movido.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Par\'ametros y opciones:}
	\begin{itemize}
		\item[-] Parámetro 1 (obligatorio): origen
		\item[-] Parámetro 2 (obligatorio): destino
		\item[-] Parámetro 3 (opcional): comando que la invoca
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Invocaci\'on:} \\[0.2cm]
		\indent El comando se ejecuta manualmente: \\
		\indent Ejemplos:
		
		\begin{itemize}
		\item[$\$$] ./MoverW5.sh ~/Documents/archivo .
		\item[$\$$] ./MoverW5.sh ~/Documents/archivo ..
		\item[$\$$] ./MoverW5.sh ~/Documents/archivo ~/Documents/
		\item[$\$$] ./MoverW5.sh  archivo ~/Documents/carpetaDestino
		\end{itemize}
		\vspace*{0.1cm}
		
	\indent \emph{Hip\'otesis y aclaraciones espec\'ificas del comando:}
	\begin{itemize}
		\item[-] Al realizar una operacion de mover donde el destino y el origen son el mismo el comando no hará acción alguna.
	\end{itemize}
	\vspace*{0.1cm}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: MoverW5.sh} \hfill \\[-0.7cm]

    \noindent\hrulefill
    
	\lstinputlisting{../comandos/MoverW5.sh}
	
	\vspace*{1cm}
	
\subsection{LoguearW5}
\vspace*{0.25cm}
	
	Este comando se encarga de registrar todos los mensajes, ya sean de caracter informativo, de error, de alerta o de error severo que recibe desde otros comandos ó desde la misma línea de comandos. Estos mensajes son manipulados para añadir información sobre quién, qué, cuándo, dónde y por qué (-Standard W5-) ha ocurrido el acontecimiento, y así dejar registro de lo sucedido. \\
	
Además, de esta forma se logra un alto grado de estandarización, mantenimiento y centralización en los mensajes escritos en los
archivos de log. Para esto se decidió crear un archivo maestro de mensajes, denominado “Mensajes.mae”, que contiene una lista numerada
de los posibles mensajes. Dicha lista permite que por medio de un numero, o id, en reemplazo del mensaje el script se encarga de
buscarlo en la lista antes mencionada y grabar ese mensaje en el log. \\

El mismo script se encarga de buscar en la lista antes mencionada cual es el último id generado para realizar las validaciones necesarias y evitar así tener hardcodeado ese valor, permitiendo seguir añadiendo mensajes requeridos por otros comandos sin afectar el loguear. \\

Existe la posibilidad de invocar el comando sin indicarle un id de mensaje, sino que se le pasa el propio mensaje como parámetro, esta
funcionalidad resulta necesaria ya que determinados mensajes incluyen cierta información que es imposible conocer de antemano y, por ende, no se pueden estandarizar. \\

Dependiendo del comando que sea utilizado como parámetro para efectuar la llamada, se generará un log diferente evitando así la mezcla de mensajes de otros comandos que no insiden sobre el primero o simplemente por una cuestión de orden. Si el archivo de output no
existe, la función lo crea; de lo contrario, agrega un nuevo registro al final del mismo. \\

Por otro lado, se realiza un control sobre el tamaño del archivo de log evitando así que crezca indiscriminadamente. Se genera un archivo intermedio cuando se desea reducir el tamaño de dicho archivo de log, se copia la última mitad del archivo y, posteriormente, se efectúa una reasignación de nombres para que el archivo de log original sea eliminado y el nuevo archivo reemplace al recientemente eliminado. \\\\

	\indent \emph{Archivos de input:}
	\begin{itemize}
		\item[-] Archivo de configuración (InstalaW5.conf).
		\item[-] Archivo de mensajes centralizado (Mensajes.mae)
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos intermedios:}
	\begin{itemize}
		\item[-] Un archivo temporal para recortar a la mitad el log cuando este lo requiera.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos de output:}
	\begin{itemize}
		\item[-] Archivos de log segun nombre de comando ({LOGDIR}/[comando].{LOGEXT}).
		\item[-] Standard output.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Par\'ametros y opciones:}
	\begin{itemize}
		\item[-] Primer parámetro: Nombre del comando en el que se va a escribir su
correspondiente archivo de log (IniciarW5, DetectaW5, BuscarW5, ListarW5, MirarW5, MoverW5).
		\item[-] Segundo parámetro: Tipo de mensaje (A:alerta, I:informativo, E:error o ES:error severo).
		\item[-] Tercer parámetro: ID que corresponde al mensaje en el archivo maestro “Mensajes.mae”; o bien un mensaje.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Invocaci\'on:} \\[0.2cm]
	\indent	La invocación de este comando se realiza en forma manual o desde otros comandos. \\
	\indent Ejemplos:
	
	\begin{itemize}
	\item[$\$$] ./LoguearW5.sh MirarW5 I 14 (graba el log con el mensaje 14).
	\item[$\$$] ./LoguearW5.sh MoverW5 A "Esto es un alerta" (graba el log con el mensaje pasado entre comillas).
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Hip\'otesis y aclaraciones espec\'ificas del comando:}
	\begin{itemize}
		\item[-] Utiliza la hipótesis global del trabajo práctico de utilizar como ruta del archivo de configuración del sistema
$\$$HOME/.grupo08/InstalaW5.conf.
		\item[-] El archivo maestro de mensajes no será alterado por terceros ni cambiado de lugar. Siempre existe.
		\item[-] La funcionalidad de reducción del tamaño del archivo de log se encuentra embebida en el loguear y se verifica el tamaño con cada nueva línea agregada a la misma. Dicha reducción se lleva a cabo a la mitad del total de líneas.
	\end{itemize}
	\vspace*{0.1cm}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: LoguearW5.sh} \hfill \\[-0.7cm]

    \noindent\hrulefill
    
	\lstinputlisting{../comandos/LoguearW5.sh}
	
	\vspace*{1cm}
	
\subsection{MirarW5}
\vspace*{0.25cm}
	
	Este comando se encarga de generar una visualización amigable del contenido del archivo de log del comando pasado por parámetro. Dispone de varias opciónes de visualización, como son ver las primeras X líneas del archivo, ver la últimas X líneas, mostrar todas aquellas que contengan un string determinado, o incluso se decidió agregar la opción de ver todos los mensajes que correspondan a un determinado tipo, ej: ver todos los mensajes de alerta, de error, de error severo, o informativo. \\
	
Se chequea que exista el archivo de log. \\\\

	\indent \emph{Archivos de input:}
	\begin{itemize}
		\item[-] Archivo de configuración (InstalaW5.conf).
		\item[-] Archivos de log segun nombre de comando ({LOGDIR}/[comando].{LOGEXT})
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos intermedios:}
	\begin{itemize}
		\item[] No requiere.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos de output:}
	\begin{itemize}
		\item[-] Standard output.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Par\'ametros y opciones:}
	\begin{itemize}
		\item[-] Primer parámetro: Nombre del comando del correspondiente archivo de log del que se quiere consultar (InstalaW5, IniciarW5, DetectaW5, BuscarW5, ListarW5, MirarW5, MoverW5).
		\item[-] Segundo y tercer parámetro: Opciones:
		\begin{itemize}
			\item[] Opción -p N muestra las primeras N líneas del archivo de log.
			\item[] Opción -u N muestra las últimas N líneas del archivo de log.
			\item[] Opción -s "string" muestra todas las líneas del archivo de log que contengan al string buscado.
			\item[] Opción -t T muestra todas las líneas que pertenezcan al tipo de mensaje T (A:alerta, I:informativo, E:error o ES:error severo).
		\end{itemize}
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Invocaci\'on:} \\[0.2cm]
	\indent La invocación de este comando se realiza en forma manual. \\
	\indent Ejemplos:
	
	\begin{itemize}
	\item[$\$$] ./MirarW5.sh BuscarW5 -p 8 (muestra las primeras 8 líneas del archivo).
	\item[$\$$] ./MirarW5.sh BuscarW5 -u 12 (muestra las últimas 12 líneas del archivo).
	\item[$\$$] ./MirarW5.sh BuscarW5 -s "ambiente" (muestra todas las líneas que contengan "ambiente").
	\item[$\$$] ./MirarW5.sh BuscarW5 -t E (muestra todos los mensajes de error).
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Hip\'otesis y aclaraciones espec\'ificas del comando:}
	\begin{itemize}
		\item[-] Utiliza la hipótesis global del trabajo práctico de utilizar como ruta del archivo de configuración del sistema
$\$$HOME/.grupo08/InstalaW5.conf.
	\end{itemize}
	\vspace*{0.1cm}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: MirarW5.sh} \hfill \\[-0.7cm]

    \noindent\hrulefill
    
	\lstinputlisting{../comandos/MirarW5.sh}
	
	\vspace*{1cm}
	
\subsection{StartD}
\vspace*{0.25cm}

Comando para arrancar el Demonio.  Para ello debe inicializar el ambiente para la ejecucion e invoca el comando IniciarW5. \\\\

	\indent \emph{Archivos de input:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos intermedios:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos de output:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Par\'ametros y opciones:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Invocaci\'on:} \\[0.2cm]
	\indent El comando se ejecuta manualmente:
	\begin{itemize}
	\item[$\$$] ./StartD.sh
	\item[$\$$] . StartD.sh
	\item[$\$$] bash StartD.sh
	\end{itemize}
	\vspace*{0.1cm}

	\indent \emph{Hip\'otesis y aclaraciones espec\'ificas del comando:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: StartD.sh} \hfill \\[-0.7cm]

    \noindent\hrulefill
    
	\lstinputlisting{../comandos/StartD.sh}
	
	\vspace*{1cm}
	
\subsection{StopD}
\vspace*{0.25cm}

Comando para detener la ejecucion del demonio.   \\\\

	\indent \emph{Archivos de input:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos intermedios:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Archivos de output:}
	\begin{itemize}
		\item[-] Standard output.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Par\'ametros y opciones:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Invocaci\'on:} \\[0.2cm]
	\indent El comando se ejecuta manualmente con los comandos:
	\begin{itemize}
	\item[$\$$] ./StopD.sh
	\item[$\$$] . StopD.sh
	\item[$\$$] bash StopD.sh
	\end{itemize}
	\vspace*{0.1cm}
	
	\indent \emph{Hip\'otesis y aclaraciones espec\'ificas del comando:}
	\begin{itemize}
		\item[] No presenta.
	\end{itemize}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: StopD.sh} \hfill \\[-0.7cm]

    \noindent\hrulefill
	\lstinputlisting{../comandos/StopD.sh}

\vspace*{0.25cm}
\subsection{Adicionales}
\vspace*{0.25cm}

\begin{description}
	\item[\large{ResultadosGlobales y ResultadosDetallados}] \hfill \\\\
	\indent \emph{Justificaci\'on:} \\

El archivo fuente ListarW5.pl tiene la responsabilidad de la interpretación de las opciones pasadas por líneas de comando y de proveer funcionalidades básicas de acceso a los archivos maestros y de resultados, así como tareas básicas de I/O. A la hora de solicitar el ingreso de datos y de generar los resultados de las consultas, delega estas tareas en los módulos contenidos en los archivos fuente ResultadosGlobales.pm y ResultadosDetallados.pm. \\

Estos módulos proveen la funcionalidad correspondiente a la opción -g y a la opción -r respectivamente. Ambos poseen una primera etapa que guía al usuario en el ingreso de filtros y criterios de reporte y luego un conjunto de funciones que se encargan de procesar los archivos de resultados para obtener la información solicitada. \\

\end{description}

	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: Resultados detallados} \hfill \\[-0.7cm]
	
	\noindent\hrulefill
	\lstinputlisting{../comandos/ResultadosDetallados.pm}
	
	\vspace*{0.5cm}
	
	\noindent\hrulefill \\
	\textbf{C\'odigo fuente: Resultados globales} \hfill \\[-0.7cm]
	
	\noindent\hrulefill
	\lstinputlisting{../comandos/ResultadosGlobales.pm}

\newpage
\section{Archivos}
\vspace*{0.5cm}

\subsection{Configuración}
\vspace*{0.25cm}

	\indent \emph{Nombre:} InstalaW5.conf \\\\
	\indent \emph{Directorio:} ~/.grupo08/ \\\\
	\indent \emph{Estructura:} VARIABLE=VALOR=USUARIO=FECHA \\[0.2cm]
	\indent con:
		\begin{itemize}
		\item VARIABLE: caracteres. \\
		Puede ser GRUPO, CONFDIR, BINDIR, MAEDIR, ARRIDIR, ACEPDIR, RECHDIR, PROCDIR, REPODIR,
LOGDIR, LOGEXT, LOGSIZE, DATASIZE, SECUENCIA1, SECUENCIA2.
		\item VALOR: caracteres. \\
		Contenido de la variable al momento de la grabaci\'on.
		\item USUARIO: caracteres. \\
		Login del usuario que graba el registro.
		\item FECHA: dd mm hh:mm:ss aa. \\
		Momento de grabaci\'on.
		\end{itemize}
	
	\vspace*{0.5cm}

\subsection{Logueo}
\vspace*{0.25cm}

	\indent \emph{Nombre:} \textless comando\textgreater.\{logext\} \\\\
	\indent \emph{Directorio:} LOGDIR \\\\
	\indent \emph{Estructura:} CUANDO-QUIEN-DONDE-QUE-PORQUE \\[0.2cm]
	\indent con:
		\begin{itemize}
		\item FECHA: dd mm hh:mm:ss aa. \\
		Momento de grabaci\'on.
		\item QUIEN: caracteres. \\
		Login del usuario que graba el registro.
		\item DONDE: caracteres. \\
		Nombre del comando, funci\'on o rutina en donde se produce el evento que se registra.
		\item QUE: caracteres. \\
		Tipo de mensaje: informativo (I), alerta (A), error (E), error severo (SE).
		\item PORQUE: caracteres, m\'aximo 120. \\
		C\'odigo de mensaje y mensaje.		
		\end{itemize}
		
	\vspace*{0.5cm}

\subsection{Patrones}
\vspace*{0.25cm}

	\indent \emph{Nombre:} patrones \\\\
	\indent \emph{Directorio:} MAEDIR/ \\\\
	\indent \emph{Estructura:} PAT\_ID,PAT\_EXP,SIS\_ID,PAT\_CON,DESDE,HASTA \\[0.2cm]
	\indent con:
		\begin{itemize}
		\item PAT\_ID: num\'erico. \\
		Id de patr\'on.
		\item PAT\_EXP: caracteres. \\
		Expresi\'on regular a aplicar.
		\item SIS\_ID: num\'erico. \\
		C\'odigo de sistema.
		\item PAT\_CON: caracteres. \\
		Conexto de resultado. Puede ser l\'inea o caracter.
		\item DESDE: num\'erico. \\
		Punto de partida de aplicaci\'on del contexto.	
		\item HASTA: num\'erico. \\
		Punto de fin de aplicaci\'on del contexto.
		\end{itemize}
		
	\vspace*{0.5cm}
	
\subsection{Sistemas}
\vspace*{0.25cm}

	\indent \emph{Nombre:} sistemas \\\\
	\indent \emph{Directorio:} MAEDIR/ \\\\
	\indent \emph{Estructura:} SIS\_ID, SIS\_NOM, SIS\_ALTA, SIS\_BAJA \\[0.2cm]
	\indent con:
		\begin{itemize}
		\item SIS\_ID: num\'erico. \\
		C\'odigo de sistema.
		\item SIS\_NOM: caracteres. \\
		Nombre del sistema.
		\item SIS\_ALTA: dd mm hh:mm:ss aa.. \\
		Fecha de alta.
		\item SIS\_BAJA: dd mm hh:mm:ss aa.. \\
		Fecha de baja,
		\end{itemize}
		
	\vspace*{0.5cm}

\subsection{Resultados globales}
\vspace*{0.25cm}

	\indent \emph{Nombre:} rglobales.\{PAT\_ID\} \\\\
	\indent \emph{Directorio:} PROCDIR/ \\\\
	\indent \emph{Estructura:} SECUENCIA2, NOMBRE\_ARCHIVO, HALLAZGOS, PAT\_EXP, PAT\_CON, DESDE, HASTA \\[0.2cm]
	\indent con:
		\begin{itemize}
		\item SECUENCIA2: num\'erico. \\
		Ciclo de b\'usqueda.
		\item NOMBRE\_ARCHIVO: caracteres. \\
		Nombre del archivo procesado.
		\item HALLAZGOS: num\'erico. \\
		Cantidad de hallazgos del patr\'on en el archivo.
		\item PAT\_EXP: caracteres. \\
		Expresi\'on regular del patr\'on aplicado.
		\item PAT\_CON: caracteres. \\
		Conexto de resultado del patr\'on aplicado.
		\item DESDE: num\'erico. \\
		Punto de partida de aplicaci\'on del contexto.	
		\item HASTA: num\'erico. \\
		Punto de fin de aplicaci\'on del contexto.
		\end{itemize}
		
	\vspace*{0.5cm}	

\subsection{Resultados detallados}
\vspace*{0.25cm}

	\indent \emph{Nombre:} resultados.\{PAT\_ID\} \\\\
	\indent \emph{Directorio:} PROCDIR/ \\\\
	\indent \emph{Estructura:} SECUENCIA2, NOMBRE\_ARCHIVO, NUM\_REGISTRO, RESULTADO \\[0.2cm]
	\indent con:
		\begin{itemize}
		\item SECUENCIA2: num\'erico. \\
		Ciclo de b\'usqueda.
		\item NOMBRE\_ARCHIVO: caracteres. \\
		Nombre del archivo procesado.
		\item NUM\_REGISTRO: num\'erico. \\
		N\'umero de registro del archivo donde se encontr\'o el patr\'on.
		\item RESULTADO: caracteres. \\
		Resultado obtenido de acuerdo al contexto aplicado.
		\end{itemize}
		
	\vspace*{0.5cm}	
	
\subsection{Reportes}
\vspace*{0.25cm}

	\indent \emph{Nombre:} salida.XXX \\\\
	\indent \emph{Directorio:} REPODIR/ \\\\
	\indent \emph{Estructura:} LINEA \\[0.2cm]
	\indent con:
		\begin{itemize}
		\item LINEA: caracteres. \\
		Línea del reporte.
		\end{itemize}
		
	\vspace*{0.5cm}	

\subsection{Adicionales}
\vspace*{0.25cm}

\begin{description}
	\item[\large{Archivo de mensajes}] \hfill \\\\
	\indent \emph{Nombre:} Mensajes.mae \\\\
	\indent \emph{Tipo de archivo:} Permanente \\\\
	\indent \emph{Justificaci\'on:} Se utiliza para la estandarización de mensajes, ya que identifica cada mensaje con un id. \\\\
	\indent \emph{Estructura:} ID-MENSAJE \\[0.2cm]
	\indent con:
		\begin{itemize}
		\item ID: numérico. \\
		Identificador del mensaje.
		\item MENSAJE: caracteres. \\
		Mensaje.
		\end{itemize}
\end{description}

\newpage
\section{Ap\'endices}
\vspace*{0.5cm}

\subsection{Enunciado}
\includepdf[pages=3-]{./Enunciado.pdf}
\includepdf[pages=-]{./EnunciadoListar.pdf}

\end{document}
